package com.thread.sync.sync05;

/**
 * 包装类,实现获取数据接口,包含真实数据对象,客户端请求时,先返回包装类对象,阻塞获取真实数据
 */
public class FutrueDateServiceImpl implements DateService {
    //真实数据
    private RealDateServiceImpl realDateServiceImpl;
    private boolean isReady = false;//是否装载完成

    //设置真实数据
    public synchronized void setRealData(RealDateServiceImpl realDateServiceImpl) {
        if (isReady) return;//已装载,返回
        //没装载进行装载
        this.realDateServiceImpl = realDateServiceImpl;
        isReady = true;
        //装载完成通知唤醒获取线程
        notify();
    }

    @Override
    public synchronized String getData() {
        //如果没装载就一直等待
        while (!isReady) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //返回真实数据对象获取的数据
        return this.realDateServiceImpl.getData();
    }

}
